package com.dz.scrm.app.config

import android.content.Context
import android.net.ParseException
import com.dz.scrm.utils.LoggerUtils
import com.google.gson.JsonIOException
import com.google.gson.JsonParseException
import me.jessyan.art.utils.ArtUtils
import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener
import org.json.JSONException
import retrofit2.HttpException
import timber.log.Timber
import java.net.SocketTimeoutException
import java.net.UnknownHostException

/**
 * 作者：fanda
 * 日期：2021/4/21 16:27
 * 描述：用来处理 RxJava 中发生的所有错误, RxJava 中发生的每个错误都会回调此接口
 */
class ResponseErrorListenerImpl : ResponseErrorListener {

    override fun handleResponseError(context: Context, t: Throwable) {
        LoggerUtils.w(t.message!!)
        //这里只是对几个常用错误进行简单的处理, 应根据业务需求来做具体严谨的处理
        var msg: String? = "未知错误---"
        if (t is UnknownHostException) {
            msg = "网络不可用"
        } else if (t is SocketTimeoutException) {
            msg = "请求网络超时"
        } else if (t is HttpException) {
            msg = convertStatusCode(t)
        } else if (t is JsonParseException || t is ParseException || t is JSONException || t is JsonIOException) {
            msg = "数据解析错误"
        }
        // snackbar 提示
        ArtUtils.snackbarText(msg)
    }

    private fun convertStatusCode(httpException: HttpException) = when (httpException.code()) {
        500 -> "服务器发生错误"
        404 -> "请求地址不存在"
        403 -> "请求被服务器拒绝"
        307 -> "请求被重定向到其他页面"
        else -> httpException.message()
    }
}